package model

import (
	"ginblog/utils/errmsg"
	"github.com/jinzhu/gorm"
)

type Article struct {
	Category   Category `gorm:"foreignkey:Cid"`
	BaseModel
	Title      string   `gorm:"type:varchar(100);not null" json:"title,omitempty"`
	Cid        int      `gorm:"type:int;not null" json:"cid"`
	Depict       string   `gorm:"type:varchar(200)" json:"depict,omitempty"`
	Content    string   `gorm:"type:longtext" json:"content,omitempty"`
	Img        string   `gorm:"type:varchar(100)" json:"img,omitempty"`
	PraiseNum  int64   `gorm:"type:int" json:"praise_num,omitempty"`
	ViewNum  int64   `gorm:"type:int" json:"view_num,omitempty"`
	CommentNum int64   `gorm:"type:int" json:"comment_num,omitempty"`

	Ispraise int64 `gorm:"type:int" json:"ispraise"`
}

// 新增文章
func CreateArt(data *Article) int {

	err := db.Create(&data).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCCSE
}

//  查询分类下所有的文章列表 返回article的切片
func GetCateArt(id int, pageSize int, pageNum int) ([]Article, int, int) {
	var cateArtList []Article
	var total int
	err = db.Preload("Category").Limit(pageSize).Offset((pageNum-1)*pageSize).Where("cid =?", id).Find(&cateArtList).Count(&total).Error
	if err != nil {
		return nil, errmsg.ERROR_CATE_NOT_EXIST, 0
	}
	return cateArtList, errmsg.SUCCSE, total
}

//  查询单个文章 Article是返回文章模型
func GetArtInfo(id int) (Article, int) {
	var art Article // 实例 article的模型
	err := db.Debug().Preload("Category").Where("id = ?", id).Select("id,depict,content,cid,created_at").First(&art).Error
	if err != nil {
		return art, errmsg.ERROR_ART_NOT_EXIST
	}
	return art, errmsg.SUCCSE
}

//  查询文章列表
func GetArt(pageSize int, pageNum int) ([]Article, int, int) {
	var articleList []Article
	var total int

	err = db.Preload("Category").Limit(pageSize).Offset((pageNum - 1) * pageSize).Find(&articleList).Count(&total).Error
	if err != nil && err != gorm.ErrRecordNotFound {
		return nil, errmsg.ERROR, 0
	}
	return articleList, errmsg.SUCCSE, total
}

// 编辑文章
func EditArt(id int, data *Article) int {
	var art Article
	var maps = make(map[string]interface{})
	maps["title"] = data.Title
	maps["cid"] = data.Cid
	maps["depict"] = data.Depict
	maps["content"] = data.Content
	maps["img"] = data.Img
	err = db.Model(&art).Where("id = ?", id).Update(maps).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCCSE
}

// 删除文章
func DeleteArt(id int) int {
	var art Article
	err = db.Where("id = ? ", id).Delete(&art).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCCSE
}

// 点赞数+1
func IncrArtPriase(id int) int {
	var art Article
	db.Model(&art).Where("id = ? ", id).UpdateColumn("praise_num", gorm.Expr("praise_num + ?", 1))

	return errmsg.SUCCSE
}


// 点赞数-1
func SubArtPriase(id int) int {
	var art Article
	err = db.Model(&art).Where("id = ? ", id).UpdateColumn("praise_num", gorm.Expr("praise_num - ?", 1)).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCCSE
}

// 评论+1
func IncrCommentArt(id int) int {
	var art Article
	db.Model(&art).Where("id = ? ", id).UpdateColumn("comment_num", gorm.Expr("comment_num + ?", 1))

	return errmsg.SUCCSE
}


// 浏览量+1
func IncrViewArt(id int) int {
	var art Article
	db.Model(&art).Where("id = ? ", id).UpdateColumn("view_num", gorm.Expr("view_num + ?", 1))

	return errmsg.SUCCSE
}
